package com.mooc.yohoshop.annotation;

import android.content.Intent;
import android.util.Log;

import com.mooc.yohoshop.App;
import com.mooc.yohoshop.ui.login.LoginActivity;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class LoginAspectj {

    //切入点->使用注解方法得点
    @Pointcut("execution(@com.mooc.yohoshop.annotation.CheckLogin * *(..))")
    public void pointcutLogin(){

    }
    //执行注解方法拦截->每当执行到注解下方法时先进入拦截方法->
    // 根据结果在进行判断是否继续向下执行
    //joinPoint-》是否继续向下执行方法
    //用户登录信息在哪里进行持久化存储->room
    //room下用户数据进行判定是否登录->有数据登录joinPoint.proceed();
    //无数据用户未登录->跳转登录界面
    //room数据如何去获取:获取用户数据时返回未Maybe<UserEntity>->被观察者
    //通过观察者进行接收数据->哪里进行接收->观察者模式涉及问题内存泄露->
    //强耦合:->ViewModel->处理->默认基类当中实现观察者->利用ViewModel获取数据->SplashViewModel
    //->SplashViewModel不涉及用户操作，但是启动逻辑在起始位置->先获取用户数据->在进入frameactivity
    //->逻辑简单
    //弱耦合:->Application 初始化获取用户信息单例，用来获取用户数据，提供观察者->接收数据->提供修改数据入口(登录以及退出操作)
    //退出程序时，终结一次观察者
    @Around("pointcutLogin()")
    public void aroundLogin(ProceedingJoinPoint joinPoint){
        if (App.getInstance().isLogin()){
            try {
                joinPoint.proceed();
            } catch (Throwable throwable) {
                throwable.printStackTrace();
            }
        }else {
            //跳转到登录界面
            Intent intent = new Intent(App.getInstance(), LoginActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            App.getInstance().startActivity(intent);
        }

    }
}
